<?php
/**
 * Created by PhpStorm.
 * User: lcz
 * Date: 2018/8/8
 * Time: 9:52
 * 微信相关操作
 */
namespace app\common\controller;

use think\Cache;
use think\Controller;

class Weixin extends Controller{
	
	//小程序ID
	private $smallAppID = 'wx17bea8f87c357e13';
	//小程序的 app secret
	private $smallAppSecret = 'ed60e5f4b9f73130350cb1638aee4689';
	//小程序支付密钥
	private $payKey = '11111111112222222222333333333344';
	//微信支付商户号
	private $mchId = '1311338601';
	
	/**
	 * 获取微信accesstoken
	 * @return bool|mixed
	 */
	public function getAccessToken(){
		if(!$token = Cache::get('AccessToken')){
			$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$this->smallAppID.'&secret='.$this->smallAppSecret;
			$res = curlGetInfo($url);
			if(isset($res['access_token']) && !empty($res['access_token'])){
				Cache::set('AccessToken', $res['access_token'], $res['expires_in']-200);
				$token = $res['access_token'];
			}
		}
		
		if($token){
			return $token;
		}
		return false;
	}
	
	/**
	 * 发送模板消息
	 * @param $touser 必填 接收者（用户）的 openid
	 * @param $templateId 必填 所需下发的模板消息的id
	 * @param $formId 必填 表单提交场景下，为 submit 事件带上的 formId；支付场景下，为本次支付的 prepay_id
	 * @param array $data 必填 模板内容，不填则下发空模板
	 * @param string $page 选填 点击模板卡片后的跳转页面，仅限本小程序内的页面。支持带参数,（示例index?foo=bar）。该字段不填则模板无跳转
	 * @param string $keyword 选填 	模板需要放大的关键词，不填则默认无放大
	 * @return bool
	 */
	public function sendTemplate($touser, $templateId, $formId, $data = [], $page='', $keyword = ''){
		$token = $this->getAccessToken();
		if(!$token){
			$this->error('token获取出错');
		}
		$url = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token='.$token;
		
		$postData = [
			'touser' => $touser,
			'template_id' => $templateId,
			'form_id' => $formId,
			'data' => $data,
			'page' => $page,
			'emphasis_keyword' => $keyword,
		];
		$res = curlGetInfo($url,'post',json_encode($postData));
		if(isset($res['errcode']) && $res['errcode'] == 0){
			return true;
		} else {
			return $res['errmsg'];
		}
	}
}